package com.ruoyi.project.system.mapper;

import java.util.Date;
import java.util.List;

import com.ruoyi.common.utils.StringUtils;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.project.system.domain.SysDictData;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import tk.mybatis.mapper.additional.idlist.DeleteByIdListMapper;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.entity.Example;

/**
 * 字典表 数据层
 * 
 * @author ruoyi
 */
public interface SysDictDataMapper extends Mapper<SysDictData>, DeleteByIdListMapper<SysDictData, Long>
{
    /**
     * 根据条件分页查询字典数据
     * 
     * @param dictData 字典数据信息
     * @return 字典数据集合信息
     */
    default List<SysDictData> selectDictDataList(SysDictData dictData) {
        Example example = new Example(SysDictData.class);
        Example.Criteria criteria = example.createCriteria();
        if (StringUtils.isNotEmpty(dictData.getDictType())) {
            criteria.andEqualTo("dictType", dictData.getDictType());
        }
        if (StringUtils.isNotEmpty(dictData.getDictLabel())) {
            criteria.andLike("dictLabel", "%" + dictData.getDictLabel() + "%");
        }
        if (StringUtils.isNotEmpty(dictData.getStatus())) {
            criteria.andEqualTo("status", dictData.getStatus());
        }
        return selectByExample(example);
    }

    /**
     * 根据字典类型查询字典数据
     * 
     * @param dictType 字典类型
     * @return 字典数据集合信息
     */
    default List<SysDictData> selectDictDataByType(String dictType) {
        Example example = new Example(SysDictData.class);
        example.createCriteria()
                .andEqualTo("status", "0")
                .andEqualTo("dictType", dictType);
        example.orderBy("dictSort").asc();
        return selectByExample(example);
    }

    /**
     * 根据字典类型和字典键值查询字典数据信息
     * 
     * @param dictType 字典类型
     * @param dictValue 字典键值
     * @return 字典标签
     */
    @Select("select dict_label from sys_dict_data where dict_type = #{dictType} and dict_value = #{dictValue}")
    String selectDictLabel(@Param("dictType") String dictType, @Param("dictValue") String dictValue);

    /**
     * 查询字典数据
     * 
     * @param dictType 字典类型
     * @return 字典数据
     */
    default int countDictDataByType(String dictType) {
        Example example = new Example(SysDictData.class);
        example.createCriteria().andEqualTo("dictType", dictType);
        return selectCountByExample(example);
    }

    /**
     * 新增字典数据信息
     * 
     * @param dictData 字典数据信息
     * @return 结果
     */
    default int insertDictData(SysDictData dictData) {
        dictData.setCreateTime(new Date());
        return insertSelective(dictData);
    }

    /**
     * 修改字典数据信息
     * 
     * @param dictData 字典数据信息
     * @return 结果
     */
    default int updateDictData(SysDictData dictData) {
        dictData.setUpdateTime(new Date());
        return updateByPrimaryKeySelective(dictData);
    }

    /**
     * 同步修改字典类型
     * 
     * @param oldDictType 旧字典类型
     * @param newDictType 新旧字典类型
     * @return 结果
     */
    @Update("update sys_dict_data set dict_type = #{newDictType} where dict_type = #{oldDictType}")
    int updateDictDataType(@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType);
}
